<?php

namespace app\utils;

class IdcardUtil
{
    /**
     *  根据身份证号码获取性别
     * @param string $idcard 身份证号码
     * @return int $sex 性别 0男 1女
     */
    public function getIdcardSex($idcard)
    {
        if (empty($idcard)) {
            return null;
        }
        $sexint = (int)substr($idcard, 16, 1);

        return $sexint % 2 === 0 ? 2 : 1;
    }

    /**
     *  根据身份证号码计算年龄
     * @param string $idcard 身份证号码
     * @return int $age
     */
    public function getIdcardAge($idcard)
    {
        if (empty($idcard)) {
            return null;
        }

        // 获得出生年月日的时间戳
        $date = strtotime(substr($idcard, 6, 8));
        //获得今日的时间戳
        $today = strtotime('today');
        //得到两个日期相差的大体年数
        $diff = floor(($today - $date) / 86400 / 365);
        //strtotime加上这个年数后得到那日的时间戳后与今日的时间戳相比
        $age = strtotime(substr($idcard, 6, 8) . ' +' . $diff . 'years') > $today ? ($diff + 1) : $diff;

        return $age;
    }

    /**
     *  根据身份证号码获取生日
     * @param string $idcard 身份证号码
     * @return $birthday
     */
    public function getBirthday($idcard)
    {
        if (empty($idcard)) {
            return null;
        }
        $bir = substr($idcard, 6, 8);
        $year = (int)substr($bir, 0, 4);
        $month = (int)substr($bir, 4, 2);
        $day = (int)substr($bir, 6, 2);
        return $year . "-" . $month . "-" . $day;
    }
}
